// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cloudHelper } = pathImport;;
const ProjectBiz = require('../../../comm/biz/project_biz.js');
const { logEvent } = require('../../../helpers/log_helper.js');
const { getNetworkStatus, listenNetworkStatus } = require('../../../helpers/network_helper.js');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    isLoad: false,
    list: [],

    // 搜索条件
    search: '',
    
    // 分类筛选选项
    categoryOptions: ['全部', '工作', '技术', '生活', '其他'],
    categoryIndex: 0,

    // 排序条件
    sortOptions: [
      { label: '最新', type: 'time', order: 'desc' },
      { label: '最早', type: 'time', order: 'asc' },
    ],
    sortIndex: 0,

    // 当前页码
    page: 1
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function(options) {
    // 网络检测
    const net = await getNetworkStatus();
    if (!net.isConnected) {
      wx.showToast({ title: '当前无网络，请检查连接', icon: 'none' });
    } else if (net.networkType === '2g') {
      wx.showToast({ title: '当前为2G弱网，体验可能受影响', icon: 'none' });
    }
    listenNetworkStatus((res) => {
      if (!res.isConnected) wx.showToast({ title: '网络已断开', icon: 'none' });
      else if (res.networkType === '2g') wx.showToast({ title: '当前为2G弱网', icon: 'none' });
    });
    logEvent('page_load', { page: 'knowledge_note_list' });
    ProjectBiz.initPage(this);
    this._loadList();
  },

  /**
   * 加载列表数据
   */
  _loadList: async function() {
    if (!this.data.isLoad) {
      this.setData({
        isLoad: true
      });
    }

    // 筛选条件
    let params = {
      search: this.data.search,
      sortType: this.data.sortOptions[this.data.sortIndex].type,
      sortOrder: this.data.sortOptions[this.data.sortIndex].order,
      page: this.data.page
    };

    // 分类筛选
    if (this.data.categoryIndex > 0) {
      params.category = this.data.categoryOptions[this.data.categoryIndex];
    }

    try {
      let result = await cloudHelper.callCloudData('knowledge/note_list', params);
      if (!result) return;

      let list = result.list || [];

      if (this.data.page == 1) {
        this.setData({
          list
        });
      } else {
        this.setData({
          list: this.data.list.concat(list)
        });
      }
    } catch (err) {
      console.error(err);
    }
  },

  /**
   * 搜索输入
   */
  bindSearchInput: function(e) {
    this.setData({
      search: e.detail.value
    });
  },

  /**
   * 搜索按钮点击
   */
  bindSearchTap: function(e) {
    this.setData({
      page: 1
    });
    this._loadList();
  },

  /**
   * 分类筛选变化
   */
  bindCategoryChange: function(e) {
    this.setData({
      categoryIndex: e.detail.value,
      page: 1
    });
    this._loadList();
  },

  /**
   * 排序变化
   */
  bindSortChange: function(e) {
    this.setData({
      sortIndex: e.detail.value,
      page: 1
    });
    this._loadList();
  },

  /**
   * 添加随手记
   */
  bindAddTap: function() {
    wx.navigateTo({
      url: '../note/knowledge_note?timeout=10000',
    });
  },

  /**
   * 点击项目查看详情
   */
  bindItemTap: function(e) {
    let id = pageHelper.dataset(e, 'id');
    if (!id) return;

    wx.navigateTo({
      url: '../note/knowledge_note?id=' + id,
     timeout: 10000, fail: function(err) {
        // 处理超时错误
        if (err.errMsg && err.errMsg.includes("timeout")) {
          wx.showToast({
            title: "页面加载超时，请重试",
            icon: "none"
          });
          return;
        }
        
        // 处理其他错误
        console.error("页面跳转失败:", err);
        wx.showToast({
          title: "页面跳转失败",
          icon: "none"
        });
      }});
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {
    // 如果已没有数据，则不获取
    if (this.data.list.length < this.data.page * 20) return;

    this.setData({
      page: this.data.page + 1
    });
    this._loadList();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: async function() {
    this.setData({
      page: 1
    });
    await this._loadList();
    wx.stopPullDownRefresh();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {
    // 如果列表已加载，则刷新
    if (this.data.isLoad) {
      this.setData({
        page: 1
      });
      this._loadList();
    }
  }
}) 